// 扩展3.不实现定义的虚函数就是纯虚函数
#include <iostream>
class Test
{
protected:
  int a = 3;

public:
  void fun();// 普通函数只声明不定义不会报错
  virtual void func(); // 不定义
  // 这样写，如果派生类不重载的话，会报错，undefined reference to `Test::func()'
};

class _Test : public Test
{
public:
  // 派生类_Test重写、覆盖了基类Test的纯虚方法func 
  void func()
  {
    std::cout << "_Test func()" << std::endl;
  }
};

int main(void)
{
  // Test t1; // undefined reference to `vtable for Test',有纯虚函数，不能创建实例
  _Test _t1;
  // _t1.func();
  (&_t1)->func();
  printf("-----------------end-----------------\n");
  return 0;
}